/*
 * Copyright (c) 2018-2022, 四川蜀天梦图数据科技有限公司.
 * All rights reserved.
 */

package array_and_string

// https://leetcode.cn/problems/merge-sorted-array leetcode-88
func merge(nums1 []int, m int, nums2 []int, n int) {
	if len(nums1) == n {
		for i := 0; i < len(nums2); i++ {
			nums1[i] = nums2[i]
		}
		return
	}

	actual := nums1[:m]
	index := len(nums1) - 1

	i1 := len(actual) - 1
	i2 := len(nums2) - 1
	for {
		if i1 >= 0 && i2 >= 0 {
			if actual[i1] <= nums2[i2] {
				nums1[index] = nums2[i2]
				i2--
			} else {
				nums1[index] = actual[i1]
				i1--
			}
		} else if i1 >= 0 && i2 < 0 {
			nums1[index] = actual[i1]
			i1--
		} else if i1 < 0 && i2 >= 0 {
			nums1[index] = nums2[i2]
			i2--
		}

		index--
		if i2 < 0 && i1 < 0 {
			break
		}
	}
}
